import asyncio
# 1.什么是迭代器，什么是生成器，两者的区别
# 迭代器可以用来表示一个数据流，提供了数据的惰性返回功能；生成器是一种特殊的迭代器，在迭代器惰性返回数据的基础上提供了额外的功能， 实现了程序的暂停。
# 区别：同样提供了惰性返回的功能，迭代器侧重于提供数据的惰性返回功能，生成器侧重于指令的惰性返回功能
# 2.协程的实现原理
# 与生成器原理相同，但又提供了传递值的功能
# 3.asyncio实现原理
# 自行维护了一个事件队列，然后循环访问事件来完成异步的消息维护。
# 4.用协程实现一个计算平均数的函数
def coro_aver():
    total = 0
    length = 0
    while True:
        try:
            value = yield total/length
        except ZeroDivisionError:
            value = yield 0
        total += value
        length += 1

my_aver = coro_aver()
print(next(my_aver))
print(my_aver.send(2))
print(my_aver.send(3))
# 5.编写一个asyncio异步程序
class Zhuangtai:
    status_code = "饱了"


async def cat_fish(index):
    print(f"小猫吃的第几条鱼: {index}")
    response = Zhuangtai()
    await asyncio.sleep(1)
    print(f"小猫吃的第几条鱼：{index}, 吃的怎么样了：{response.status_code}")
    return response.status_code

loop = asyncio.get_event_loop()

task_array = []
for i in range(5):
    task_array.append(cat_fish(i))

loop.run_until_complete(asyncio.wait(task_array))

loop.close()






